﻿Imports System.IO
Imports System.Collections
Imports Microsoft.VisualBasic
Imports System.Xml
Imports System.Text
Imports System.Windows.Forms

Public Class tlxIni
    'API Functions
    Private Declare Ansi Function GetPrivateProfileString _
        Lib "kernel32.dll" Alias "GetPrivateProfileStringA" _
        (ByVal lpApplicationName As String, _
         ByVal lpKeyName As String, ByVal lpDefault As String, _
         ByVal lpReturnedString As System.Text.StringBuilder, _
         ByVal nSize As Integer, ByVal lpFileName As String) _
        As Integer
    Private Declare Ansi Function WritePrivateProfileString _
        Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
        (ByVal lpApplicationName As String, _
         ByVal lpKeyName As String, ByVal lpString As String, _
         ByVal lpFileName As String) As Integer
    Private Declare Ansi Function GetPrivateProfileInt _
        Lib "kernel32.dll" Alias "GetPrivateProfileIntA" _
        (ByVal lpApplicationName As String, _
         ByVal lpKeyName As String, ByVal nDefault As Integer, _
         ByVal lpFileName As String) As Integer
    Private Declare Ansi Function FlushPrivateProfileString _
        Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
        (ByVal lpApplicationName As Integer, _
         ByVal lpKeyName As Integer, ByVal lpString As Integer, _
         ByVal lpFileName As String) As Integer
    Dim strFilename As String

    Enum Sections
        [DEFAULT]
        InternetShortcut
    End Enum

    Enum Keys
        BASEURL
        ICON
        URL
    End Enum

    'Constructor, accepting a filename
    Public Sub New(ByVal filename As String)
        strFilename = filename
    End Sub

    ReadOnly Property FileName() As String
        Get
            Return strFilename

        End Get
    End Property

    Public Function GetString(ByVal Section As String, _
    ByVal Key As String, ByVal [Default] As String) As String
        Dim ret As String = String.Empty

        Try
            Dim intCharCount As Integer
            Dim objResult As New System.Text.StringBuilder(256)
            intCharCount = GetPrivateProfileString(Section, Key, _
                [Default], objResult, objResult.Capacity, strFilename)
            If intCharCount > 0 Then ret = _
                Left(objResult.ToString, intCharCount)
            Return ret

        Catch ex As Exception
            Return ex.Message.ToString
        End Try
    End Function

    Public Function GetInteger(ByVal Section As String, _
    ByVal Key As String, ByVal [Default] As Integer) As Integer
        'Returns a integer from your INI file.
        Return GetPrivateProfileInt(Section, Key, _
            [Default], strFilename)
    End Function

    Public Function GetBoolean(ByVal Section As String, _
    ByVal Key As String, ByVal [Default] As Boolean) As Boolean
        'Returns a boolean from your INI file.
        Return (GetPrivateProfileInt(Section, Key, _
            CInt([Default]), strFilename) = 1)
    End Function

    Public Sub WriteString(ByVal Section As String, _
    ByVal Key As String, ByVal Value As String)
        'Writes a string to your INI file.
        WritePrivateProfileString(Section, Key, Value, strFilename)
        Flush()
    End Sub

    Public Sub WriteInteger(ByVal Section As String, _
    ByVal Key As String, ByVal Value As Integer)
        'Writes an integer to your INI file.
        WriteString(Section, Key, CStr(Value))
        Flush()
    End Sub

    Public Sub WriteBoolean(ByVal Section As String, _
    ByVal Key As String, ByVal Value As Boolean)
        'Writes a boolean to your INI file.
        WriteString(Section, Key, CStr(CInt(Value)))
        Flush()
    End Sub

    Private Sub Flush()
        'Stores all the cached changes to your INI file.
        FlushPrivateProfileString(0, 0, 0, strFilename)
    End Sub

End Class
